package transformation;

import java.io.*;

/*
转换流：InputStreamReader 和 OutputStreamWriter
介绍
1.InputStreamReader:Reader的子类，可以将InputStream(字节流)包
  装成Reader(字符流)
2.OutputStreamWriter:Writer的子类,实现将OutputStream(字节流)
  包装成Writer(字符流)
3.当处理纯文本数据时，如果使用字符流效率更高，并且可以有效解决中文问题,所以建议将字节流转换成字符流
4.可以在使用时指定编码格式(比如utf-8, gbk , gb2312, ISO8859-1等)
 */

/**
 * @author DCSGO
 * @version 1.0
 * 使用 InputStreamReader 解决编码问题
 */
public class InputStreamReader_ {
    public static void main(String[] args) throws IOException {
        String filePath = "C:\\Users\\Administrator\\Desktop\\Javacode\\java-learning-code\\chapter19\\src\\transformation\\ANSI.txt";
        //InputStreamReader(InputStream in, String charsetName) 通过这个构造器 实例化一个 InputStreamReader 对象
        //GBK 当前环境下对应的 ANSI 编码标准 将FileInputStream 包装成 InputStreamReader
        InputStreamReader isr = new InputStreamReader(new FileInputStream(filePath), "GBK");
        //InputStreamReader 是 Reader 的一个实现子类 此时再将其包装成 BufferedReader
        BufferedReader br = new BufferedReader(isr);
        //此时就可以正常调用 BufferedReader 类所提供的方法并正确读取字符信息了
        System.out.println(br.readLine());//解决了读取非 UTF-8 编码的文本文件的乱码问题
        //Hello 武汉！
        br.close();
    }
}
